package cn.lg.soar.core.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 序列号方式（黑名单法）
 * 优点：性能好，生成key无需后端参与，比token法和参数hash法性能高
 * 缺点：不能用于防恶意重放攻击，由于key是调用方生成，所以调用方需自行保证key的唯一性
 * 前端：
 *  1.用户进入页面填写数据前自行生成唯一key
 *  2.用户提交数据时带上唯一key
 *  3.后端校验key是否存在，不存在则存入redis并执行操作，否则失败处理
 * 后端：
 *  1.唯一key验证：后端校验key是否存在redis，不存在则存入redis并执行操作，存在则说明重复请求失败处理
 * @author luguoxiang
 * @date 2022/6/27
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IdempotentByKey {

    /**
     * 摘要缓存时间（多长时间内不可再次提交）
     * @return
     */
    int expire() default 300_000;

    /**
     * 幂等性验证失败提示信息
     * @return
     */
    String message() default "请勿重复提交";

}
